home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / boss.arc / WINDOWS.H < prev   
Text File  |  1987-06-04  |  10KB  |  353 lines

  1. /*
  2. ** WINDOWS - Simple but Elegant Window Functions 
  3. **           (Lattice, Computer Innovations, Microsoft, Mark Williams)
  4. **
  5. ** Copyright (c) 1984, 1985, 1986 - Philip A. Mongelluzzo
  6. ** All rights reserved.
  7. **
  8. */
  9.  
  10. /*
  11. ** Truth, Lies, and Compiler Options 
  12. **
  13. ** Various equates for the various compilers.
  14. **
  15. ** Basic compiler invocation is:
  16. **
  17. ** BORLAND Turbo C
  18. **
  19. **      TCC -DBORLAND=1 sourcefile_name;
  20. **
  21. ** Microsoft 3.0 
  22. **
  23. **      MSC -dMSCV3 sourcefile_name;
  24. **
  25. ** Microsoft 4.0 
  26. **
  27. **      MSC -dMSCV4 sourcefile_name;
  28. **
  29. ** Lattice 2.XX 
  30. **
  31. **      LCS -dLC2 sourcefile_name
  32. **
  33. ** Lattice 3.XX
  34. **
  35. **      LCS -dLC3 sourcefile_name
  36. **
  37. ** Datalight
  38. **
  39. **      DLC1 -dDLC -mS sourcefile_name
  40. **      DLC2 sourcefile_name -S
  41. **
  42. ** Mark Williams "Lets C"
  43. **
  44. **      CC -DMWC sourcefile_name
  45. **
  46. ** Computer Innovations CI86
  47. **
  48. **      cc1 -cm -dC86 sourcefile_name
  49. **      cc2 ...
  50. **
  51. */
  52.  
  53. /*
  54. ** ONE of the following can be commented out if you prefer to
  55. ** use this method instead of the command line arg at compile time.
  56. **
  57. ** Registered Users Only: 
  58. **
  59. **   BE SURE TO MAKE CHANGES IN BOTH WINDOWS.C AND WINDOWS.H
  60. */
  61.  
  62. /* #define BORLAND 1 */
  63. /* #define MSCV3 */
  64. /* #define MSCV4 */
  65. /* #define LC2   */
  66. /* #define LC3   */
  67. /* #define DLC   */
  68. /* #define MWC   */
  69. /* #define C86   */
  70.  
  71. /*
  72. ** Microsoft 3.00
  73. */
  74.  
  75. #ifdef MSCV3
  76. #define MSC     1
  77. #define MSC4    0
  78. #define DLC     0
  79. #define MWC     0
  80. #define CI86    0
  81. #define LC2     0
  82. #define LC3     0
  83. #if M_I86SM                             /* small code, small data */
  84. #define SPTR    1
  85. #define LPTR    0
  86. #endif
  87. #if M_I86LM                             /* large code, large data */
  88. #define SPTR    0
  89. #define LPTR    1
  90. #endif
  91. #if M_I86CM                             /* small code, large data */
  92. #define SPTR    0
  93. #define LPTR    1
  94. #endif
  95. #if M_I86MM                             /* large code, small data */
  96. #define SPTR    1
  97. #define LPTR    0
  98. #endif
  99. #define LATTICE 1
  100. #endif
  101.  
  102. /*
  103. ** Microsoft 4.0
  104. */
  105.  
  106. #ifdef MSCV4
  107. #define MSC     1
  108. #define MSC4    1
  109. #define DLC     0
  110. #define MWC     0
  111. #define CI86    0
  112. #define LC2     0
  113. #define LC3     0
  114. #if M_I86SM                             /* small code, small data */
  115. #define SPTR    1
  116. #define LPTR    0
  117. #endif
  118. #if M_I86LM                             /* large code, large data */
  119. #define SPTR    0
  120. #define LPTR    1
  121. #endif
  122. #if M_I86CM                             /* small code, large data */
  123. #define SPTR    0
  124. #define LPTR    1
  125. #endif
  126. #if M_I86MM                             /* large code, small data */
  127. #define SPTR    1
  128. #define LPTR    0
  129. #endif
  130. #define LATTICE 1
  131. #endif
  132.  
  133. /*
  134. ** BORLAND
  135. */
  136.  
  137. #ifdef BORLAND
  138. #define MSC     1
  139. #define MSC4    1
  140. #define DLC     0
  141. #define MWC     0
  142. #define CI86    0
  143. #define LC2     0
  144. #define LC3     0
  145. #if __SMALL__                           /* small code, small data */
  146. #define SPTR    1
  147. #define LPTR    0
  148. #endif
  149. #if __LARGE__                           /* large code, large data */
  150. #define SPTR    0
  151. #define LPTR    1
  152. #endif
  153. #if __COMPACT__                         /* small code, large data */
  154. #define SPTR    0
  155. #define LPTR    1
  156. #endif
  157. #if __MEDIUM__                          /* large code, small data */
  158. #define SPTR    1
  159. #define LPTR    0
  160. #endif
  161. #define LATTICE 1
  162. #endif
  163.  
  164. /*
  165. ** Computer Innovations
  166. */
  167.  
  168. #ifdef C86
  169. #define BORLAND 0
  170. #define MSCV3   0
  171. #define MSCV4   0
  172. #define MSC     0
  173. #define MSC3    0
  174. #define MSC4    0
  175. #define DLC     0
  176. #define MWC     0
  177. #define CI86    1
  178. #define LC2     0
  179. #define LC3     0
  180. #ifdef _C86_BIG
  181. #define LPTR    1
  182. #define SPTR    0
  183. #else
  184. #define LPTR    0
  185. #define SPTR    1
  186. #endif
  187. #define LATTICE 0
  188. #endif
  189. #define TRUE    1                       /* truth */
  190. #define FALSE   0                       /* lies */
  191. #define The_BOSS TRUE                   /* convienent equate */
  192.  
  193. #if MSCV3 | MSCV4 | BORLAND             /* Microsoft C or BORLAND */
  194. #define LINT_ARGS                       /* enforce type checking */
  195. #if BORLAND
  196. #include "alloc.h"                      /* Borland */
  197. #else
  198. #include "malloc.h"                     /* for malloc... MSC */
  199. #endif
  200. #else                                   /* if not Microsoft C */
  201. char *malloc(), *calloc();              /* keep everybody happy */
  202. #endif
  203.  
  204. #include "stdio.h"                      /* standard header */
  205. #include "dos.h"                        /* Lattice stuff */
  206. #include "ctype.h"                      /* character conversion stuff */
  207. #if MSC4
  208. #include "stdarg.h"                     /* variable arg list marcos */
  209. #endif
  210.  
  211. #if CI86
  212. struct SREGS                            /* for segread */
  213.         {
  214.         unsigned es,cs,ss,ds;
  215.         };
  216. #endif
  217.  
  218. #define SAVE    TRUE                    /* similar truth */
  219. #define RESTORE FALSE                   /* fibs */
  220. #define REPLACE 1                       /* for flicker free */
  221. #define ERASE   0                       /* scroll w_sapd & w_sapu */
  222. #define FAST    0x01                    /* fast retrace */
  223. #define SLOW    0x08                    /* slow retrace */
  224.  
  225. #define NULPTR  (char *) 0              /* null pointer */
  226. #define BEL     0x07                    /* beep */
  227. #define BS      0x08                    /* backspace */
  228. #define NUL     '\0'                    /* NUL char */
  229. #define ESC     0x1b                    /* Escape */
  230. #define CR      0x0d                    /* carriage return */
  231. #define LF      0x0a                    /* linefeed */
  232. #define DEL     0x7f                    /* delete */
  233. #define NAK     0x15                    /* ^U */
  234. #define ETX     0x03                    /* ^C */
  235. #define CAN     0x18                    /* ^X */
  236. #define Del     0x53                    /* Del key scan code */
  237. #define ECHO    0x8000                  /* echo disable bit */
  238.  
  239. #define BIOS    0x01                    /* BIOS Scrolling */
  240. #define DMAS    0x02                    /* The BOSS's DMA Scrolling */
  241.  
  242. /*
  243. ** Externals
  244. */
  245.  
  246. extern int wn_dmaflg;                   /* dma flag */
  247. extern char wn_sbit;                    /* retrace test bit 8 slow, 1 fast */
  248. extern int wn_blank;                    /* vidon & vidoff control flag */
  249. extern int wns_bchars[];                /* box chars */
  250. extern unsigned int wns_mtflg;          /* monitor type flag */
  251. extern int wns_cflag;                   /* close in progress flag */
  252.  
  253. #if BORLAND | MSC | LATTICE | DLC | CI86/* NOT for Mark Williams */
  254. extern struct SREGS wns_srp;            /* for segread */
  255. #endif
  256.  
  257. #if MWC                                 /* Mark Williams */
  258. #define strchr index
  259. #endif
  260.  
  261. #define BCUL  wns_bchars[0]             /* some shorthand for later */
  262. #define BCUR  wns_bchars[1]
  263. #define BCTB  wns_bchars[2]
  264. #define BCSD  wns_bchars[3]
  265. #define BCLL  wns_bchars[4]
  266. #define BCLR  wns_bchars[5]
  267.  
  268. /*
  269. ** Misc Stuff
  270. */
  271.  
  272. extern unsigned wns_mtype();            /* make everyone happy */
  273.  
  274. #define WMR   wn->bsize                 /* shorthand */
  275.  
  276. typedef struct wcb                      /* Window control block */
  277. {
  278. int ulx,                                /* upper left corner x coordinate */
  279.     uly,                                /* upper left corner y coordinate */
  280.     xsize,                              /* width of window - INSIDE dimension */
  281.     ysize,                              /* height of window -INSIDE dimension */
  282.     ccx,                                /* virtual cursor offset in window */
  283.     ccy,
  284.     style,                              /* attribute to be used in window */
  285.     bstyle,                             /* border attribute */
  286.     bsize;                              /* total border size 0 or 2 only */
  287. char *scrnsave;                         /* pointer to screen save buffer */
  288. int page,                               /* current video page being used */
  289.     oldx,                               /* cursor position when window was */
  290.     oldy,                               /* opened (used for screen restore) */
  291.     wrpflg,                             /* wrap flag */
  292.     synflg;                             /* cursor sync flag */
  293. char *handle;                           /* my own id */
  294.     char *prevptr;                      /* linked list - previous */
  295.     char *nextptr;                      /* linked list - next */
  296.     char *tmpscr;                       /* for activate */
  297.     int  smeth;                         /* scroll method to use */
  298. } WINDOW, *WINDOWPTR;
  299.  
  300. extern WINDOWPTR wns_last;              /* last window opened */
  301.  
  302. #if MSCV3 | MSCV4                       /* allow for LINT_ARGS */
  303. #ifndef GENFNS
  304. #include "windows.fns"                  /* enforce type checking */
  305. #endif
  306. #else                                   /* and almost lint args */
  307. unsigned int wns_mtype();
  308. struct wcb *wn_open();
  309. struct wcb *wn_move();
  310. struct wcb *wn_save();
  311. char *wn_gets();
  312. unsigned int wns_mtype();
  313. #endif
  314.  
  315. #define BLACK   0x00                    /* foreground */
  316. #define RED     0x04                    /* background */
  317. #define GREEN   0x02                    /* colors */
  318. #define YELLOW  0x06                    /* bg << 4 | fg */
  319. #define BLUE    0x01
  320. #define MAGENTA 0x05
  321. #define CYAN    0x03
  322. #define WHITE   0x07
  323. #define BLINK   0x80
  324. #define BOLD    0x08
  325. #define NDISPB  0x00                    /* non display black */
  326. #define NDISPW  0x77                    /* non display white */
  327. #define RVIDEO  0x70                    /* reverse video */
  328. #define UNLINE  0x01                    /* under line (BLUE) */
  329.  
  330. #define NVIDEO  0x07                    /* normal video */
  331. #define NORMAL  0x03                    /* cyan is normal for me */
  332.  
  333. /*
  334. ** Display Mode Atributes
  335. */
  336.  
  337. #define B4025  0                        /* black & white 40 x 25 */
  338. #define C4025  1                        /* color 40 x 25 */
  339. #define B8025  2                        /* black & white 80 x 25 */
  340. #define C8025  3                        /* color 80 x 25 */
  341. #define C320   4                        /* color graphics 320 x 200 */
  342. #define B320   5                        /* black & white graphics */
  343. #define HIRES  6                        /* B&W hi res 640 * 200 */
  344. #define MONO   7                        /* monocrome 80 x 25 */
  345.  
  346. /*
  347. ** Macro to set attribute byte
  348. */
  349.  
  350. #define v_setatr(bg,fg,blink,bold) ((blink|(bg<<4))|(fg|bold))
  351.  
  352. /* End */
  353.